package com.cqq.auth.service;

import java.util.List;

import com.cqq.auth.service.bean.RoleBean;
import com.cqq.auth.service.bean.RoleQueryBean;
import com.cqq.auth.service.exception.RoleServiceException;
import com.cqq.common.core.bean.PageInfoBean;

/**
 * <h3>角色服务接口</h3>
 * 
 * @author xijq
 * @version 1.0.0
 * 
 */
public interface RoleService {

	/**
	 * <h3>添加角色</h3>
	 * 
	 * <p>
	 * 必须指定系统代码、角色代码（系统内唯一）
	 * </p>
	 * 
	 * @param role RoleBean
	 * 
	 */
	public void addRole(RoleBean role) throws RoleServiceException;

	/**
	 * <h3>删除角色</h3>
	 * 
	 * @param id 角色ID
	 * 
	 */
	public void deleteRole(Integer id) throws RoleServiceException;
	
	/**
	 * <h3>更新角色</h3>
	 * 
	 * @param role RoleBean
	 * 
	 */
	public void updateRole(RoleBean role) throws RoleServiceException;
	
	/**
	 * <h3>查询角色信息</h3>
	 * 
	 * @param id 角色ID
	 * 
	 * @return RoleBean
	 * 
	 */
	public RoleBean findRole(Integer id);
	
	/**
	 * <h3>指定系统查询所有角色</h3>
	 * 
	 * @param systemCode 系统代码
	 * 
	 * @return RoleBean List
	 * 
	 */
	public List<RoleBean> listAllRole(String systemCode);
	
	/**
	 * <h3>查询指定系统内，用户拥有的角色列表</h3>
	 * 
	 * @param id 用户ID
	 * @param systemCode 系统代码
	 * 
	 * @return RoleBean List
	 * 
	 */
	public List<RoleBean> listRoleByUserId(Integer id,String systemCode);
	
	/**
	 * <h3>查询指定系统内，用户拥有的角色列表</h3>
	 * 
	 * @param username 用户名
	 * @param systemCode 系统代码
	 * 
	 * @return RoleBean List
	 * 
	 */
	public List<RoleBean> listRoleByUsername(String username,String systemCode);

	/**
	 * <h3>设置角色拥有的权限</h3>
	 * 
	 * @param roleId 角色ID
	 * @param permIds 权限ID数组
	 * @param systemCode 系统代码
	 * 
	 * @throws RoleServiceException
	 */
	public void updateRolePermissions(Integer roleId, Integer[] permIds, String systemCode) throws RoleServiceException;

	/**
	 * <h3>分页查询角色列表</h3>
	 * 
	 * @param queryBean RoleQueryBean
	 * 
	 * @return PageInfoBean
	 * 
	 */
	public PageInfoBean<RoleBean> queryRoleByPage(RoleQueryBean queryBean);
	
	/**
	 * <h3>查询指定系统内，用户组拥有的角色列表</h3>
	 * 
	 * @param id 用户ID
	 * @param systemCode 系统代码
	 * 
	 * @return RoleBean List
	 * 
	 */
	public List<RoleBean> listRoleByUserGroupId(Integer userGroupId,String systemCode);
}
